package com.bestcem.xm.member.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bestcem.xm.member.entity.mysql.ExtendFieldEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * 扩展字段mapper
 *
 * @author dc.wang <dc.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/9/15 11:27
 */
@Mapper
public interface ExtendFieldMapper extends BaseMapper<ExtendFieldEntity> {

    /**
     * 查询同名的扩展字段
     *
     * @param orgId      企业id
     * @param memberType 联系人类型
     * @param names      扩展字段名称集合
     * @return 如果不存在，返回EmptyList
     */
    List<ExtendFieldEntity> listByNames(String orgId, Integer memberType, Collection<String> names);

    /**
     * 根据orgId memberType查询扩展字段
     *
     * @param orgId      企业id
     * @param memberType 联系人类型
     * @return 如果不存在，返回EmptyList
     */
    List<ExtendFieldEntity> listByOrgIdAndMemberType(String orgId, Integer memberType);

    /**
     * 批量创建扩展字段
     *
     * @param extendFieldEntities 企业id
     * @return 如果不存在，返回EmptyList
     */
    Integer batchInsert(List<ExtendFieldEntity> extendFieldEntities);

    /**
     * 批量更新扩展字段
     *
     * @param extendFieldEntities 企业id
     * @return 如果不存在，返回EmptyList
     */
    Integer batchUpdate(Collection<ExtendFieldEntity> extendFieldEntities);

    /**
     * 删除id集合中包含的扩展字段
     *
     * @param orgId 企业id
     * @param ids   扩展字段id集合
     * @return 删除数量，没有删除返回0
     */
    Integer batchDeleteByIds(String orgId, @Param("ids") Collection<String> ids);

    /**
     * 根据 name orgId memberType 获取扩展字段
     *
     * @param name       扩展字段名称
     * @param orgId      企业id
     * @param memberType 联系人类型
     * @return
     */
    ExtendFieldEntity getByNameAndOrgIdAndMemberType(String name, String orgId, Integer memberType);

    /**
     * 根据 fieldList 获取扩展字段list
     *
     * @param ids fieldList
     * @return 扩展字段list
     */
    List<ExtendFieldEntity> listByIds(Collection<String> ids);

    /**
     * 更新 扩展字段
     *
     * @param toEntity
     */
    void updateExtendField(ExtendFieldEntity toEntity);

    /**
     * 根据组织id 联系人类型 扩展字段名称 统计数量
     *
     * @param orgId
     * @param attribute
     * @param name
     * @return
     */
    Integer countByOrgIdAndMemberTypeAndName(@Param("orgId") String orgId,
                                             @Param("attribute") Integer attribute,
                                             @Param("name")String name);

    List<ExtendFieldEntity> listByOrgIdAndMemberTypes(String orgId, List<Integer> memberTypes);
}
